#include <iostream>
using namespace std;

float a[100];
// 函数声明
float second(int n);
void two(int i, int j, float &fmin2, float &fmin1);

int main()
{
    int n;
    float min2;

    // 输入数组元素个数
    cout << "请输入数组元素个数: ";
    cin >> n;

    int i;

    // 输入数组元素
    for (i = 0; i < n; i++)
    {
        cin >> a[i];
    }
    // 获取并输出第二小的数
    min2 = second(n);
    cout << "数组中的第二小的数是: " << min2 << endl;

    return 0;
}

float second(int n)
{
    float min2, min1;
    two(0, n - 1, min2, min1);
    return min2;
}

void two(int i, int j, float &fmin2, float &fmin1)
{
    float lmin2, lmin1, rmin2, rmin1;
    int mid;

    if (i == j)
    {
        fmin2 = fmin1 = a[i];
    }
    else if (i == j - 1)
    {
        if (a[i] < a[j])
        {
            fmin2 = a[j];
            fmin1 = a[i];
        }
        else
        {
            fmin2 = a[i];
            fmin1 = a[j];
        }
    }
    else
    {
        mid = (i + j) / 2;
        two(i, mid, lmin2, lmin1);
        two(mid + 1, j, rmin2, rmin1);

        if (lmin1 < rmin1)
        {
            if (lmin2 < rmin1)
            {
                fmin1 = lmin1;
                fmin2 = lmin2;
            }
            else
            {
                fmin1 = lmin1;
                fmin2 = rmin2;
            }
        }
        else
        {
            if (rmin2 < lmin1)
            {
                fmin1 = rmin1;
                fmin2 = rmin2;
            }
            else
            {
                fmin1 = rmin1;
                fmin2 = lmin1;
            }
        }
    }
}